package msgdef

import (
	"fmt"
	"src/zeus/bytestream"
)

// SrvMsgTransport 分布式实体之间传递消息用
type SrvMsgTransport struct {
	SpaceID    uint64
	MsgContent []byte
}

func (msg *SrvMsgTransport) String() string {
	return fmt.Sprintf("%+v", *msg)
}

// MarshalTo 序列化
func (msg *SrvMsgTransport) MarshalTo(data []byte) (n int, err error) {
	bw := bytestream.NewByteStream(data)
	return msg.Size(), bw.Marshal(msg)
}

// Unmarshal 反序列化
func (msg *SrvMsgTransport) Unmarshal(data []byte) error {
	br := bytestream.NewByteStream(data)
	return br.Unmarshal(msg)
}

// Size 获取长度
// 8 + 2 + len([]byte)
func (msg *SrvMsgTransport) Size() (n int) {
	return bytestream.CalcSize(msg)
}

// Name 获取名字
func (msg *SrvMsgTransport) Name() string {
	return "SrvMsgTransport"
}

// ///////////////////////////////////////////////////////////////////
// SrvGroupMsgTransport 服务器间分组消息的传递
type SrvGroupMsgTransport struct {
	SrvType    uint8
	Group      string
	MsgContent []byte
}

func (msg *SrvGroupMsgTransport) String() string {
	return fmt.Sprintf("%+v", *msg)
}

// MarshalTo 序列化
func (msg *SrvGroupMsgTransport) MarshalTo(data []byte) (n int, err error) {
	bw := bytestream.NewByteStream(data)
	return msg.Size(), bw.Marshal(msg)
}

// Unmarshal 反序列化
func (msg *SrvGroupMsgTransport) Unmarshal(data []byte) error {
	br := bytestream.NewByteStream(data)
	return br.Unmarshal(msg)
}

// Size 获取长度
// 8 + 2 + len([]byte)
func (msg *SrvGroupMsgTransport) Size() (n int) {
	return bytestream.CalcSize(msg)
}

// Name 获取名字
func (msg *SrvGroupMsgTransport) Name() string {
	return "SrvGroupMsgTransport"
}

// ///////////////////////////////////////////////////////////////////
// SrvMsgUpdateSrvInfo 服务器更新自己的信息
type SrvMsgUpdateSrvInfo struct {
	SrvID     uint64
	Addr      string
	Ver       string
	MatchType uint8
}

func (msg *SrvMsgUpdateSrvInfo) String() string {
	return fmt.Sprintf("%+v", *msg)
}

// MarshalTo 序列化
func (msg *SrvMsgUpdateSrvInfo) MarshalTo(data []byte) (n int, err error) {
	bw := bytestream.NewByteStream(data)
	return msg.Size(), bw.Marshal(msg)
}

// Unmarshal 反序列化
func (msg *SrvMsgUpdateSrvInfo) Unmarshal(data []byte) error {
	br := bytestream.NewByteStream(data)
	return br.Unmarshal(msg)
}

// Size 获取长度
// 8 + 2 + len([]byte)
func (msg *SrvMsgUpdateSrvInfo) Size() (n int) {
	return bytestream.CalcSize(msg)
}

// Name 获取名字
func (msg *SrvMsgUpdateSrvInfo) Name() string {
	return "SrvMsgUpdateSrvInfo"
}

// ///////////////////////////////////////////////////////////////////
// SrvMsgChangeSrvState 服务器改变自己的状态
type SrvMsgChangeSrvState struct {
	SrvID    uint64
	SrvState uint8 // 0 不可用，1 可用
}

func (msg *SrvMsgChangeSrvState) String() string {
	return fmt.Sprintf("%+v", *msg)
}

// MarshalTo 序列化
func (msg *SrvMsgChangeSrvState) MarshalTo(data []byte) (n int, err error) {
	bw := bytestream.NewByteStream(data)
	return msg.Size(), bw.Marshal(msg)
}

// Unmarshal 反序列化
func (msg *SrvMsgChangeSrvState) Unmarshal(data []byte) error {
	br := bytestream.NewByteStream(data)
	return br.Unmarshal(msg)
}

// Size 获取长度
// 8 + 2 + len([]byte)
func (msg *SrvMsgChangeSrvState) Size() (n int) {
	return bytestream.CalcSize(msg)
}

// Name 获取名字
func (msg *SrvMsgChangeSrvState) Name() string {
	return "SrvMsgChangeSrvState"
}
